package com.hdjd.dao;

import com.hdjd.entities.OrderDetail;
import com.hdjd.entities.SellNum;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface OrderDetailDao {
    int deleteByPrimaryKey(Integer detId);

    int insert(OrderDetail record);

    /**
     * 根据订单详细对象插入一笔数据
     * @param record
     * @return
     */
    int insertSelective(OrderDetail record);

    /**
     * 查询商家未完成订单
     * @param accId
     * @param startSize
     * @param pageSize
     * @return
     */
    List<OrderDetail> selectUnFinishOrder(@Param("accId") Integer accId, @Param("ordStatus") Integer ordStatus, @Param("startSize") Integer startSize, @Param("pageSize") Integer pageSize);

    /**
     * 查询商家未完成订单数据笔数
     * @param accId
     * @param ordStatus
     * @return
     */
    Integer countUnFinishOrder(@Param("accId") Integer accId,  @Param("ordStatus") Integer ordStatus);


    /**
     * 查询商家所有已完成订单
     * @param accId
     * @param startSize
     * @param pageSize
     * @return
     */
    List<OrderDetail> selectFinishOrder(@Param("accId") Integer accId,  @Param("ordStatus") Integer ordStatus, @Param("startSize") Integer startSize, @Param("pageSize") Integer pageSize,  @Param("startDate") String startDate,  @Param("currentDate") String currentDate);

    /**
     * 查询商家所有已完成订单数据笔数
     * @param accId
     * @param ordStatus
     * @param startDate
     * @param currentDate
     * @return
     */
    Integer countFinishOrder(@Param("accId") Integer accId,  @Param("ordStatus") Integer ordStatus,  @Param("startDate") String startDate,  @Param("currentDate") String currentDate);

    /**
     * 根据商品id查询系统当前日期该商品所有发货的总数量
     * @param goId
     * @return
     */
    Integer selectDeliverGoodsNum(@Param("goId") Integer goId, @Param("currentDate") String currentDate);

    /**
     * 根据商品id查询系统当前日期该商品所有订单退货的总数量
     * @param goId
     * @return
     */
    Integer selectOrderReturnGoodsNum(@Param("goId") Integer goId, @Param("currentDate") String currentDate);

    /**
     * 查询商品的当月销量并降序排列
     * @param goNm
     * @param startDate
     * @return
     */
    List<SellNum> selectAllGoodsSellNumByStartDateAndSchoolId(@Param("goNm") String goNm, @Param("startDate") String startDate, @Param("schoolId") Integer schoolId, @Param("pageStart") Integer pageStart, @Param("pageSize") Integer pageSize);

    /**
     * 根据订单Id去订单详细表查询订单的总价总价
     * @param ordId
     * @return
     */
    double selectOrdTotalPriByOrdId(@Param("ordId") Integer ordId);

    /**
     * 根据订单Id查询商品的类型数量
     * @param ordId
     * @return
     */
    Integer selectGoodsTypeNum(@Param("ordId") Integer ordId);

    /**
     * 根据订单Id查询商品的总配送费
     * @param ordId
     * @return
     */
    double selectShipTotalPriceByOrdId(@Param("ordId") Integer ordId);

    /**
     * 根据订单Id查询所有的订单明细信息
     * @param ordId
     * @return
     */
    List<OrderDetail> selectOrderDetailByOrdId(@Param("ordId") Integer ordId);

    /**
     * 根据订单Id删除订单明细数据
     * @param ordId
     * @return
     */
    int deleteOrderDetailByOrdId(@Param("ordId") Integer ordId);

    /**
     * 根据订单Id更新订单详细表的订单状态
     * @param ordId
     * @return
     */
    int updateOrdStatusByOrdId(@Param("ordId") Integer ordId,@Param("ordStatus") Integer ordStatus);

    /**
     * 根据订单Id更新订单详细表的订单支付时间
     * @param ordId
     * @return
     */
    int updateOrdPayTimeByOrdId(@Param("ordId") Integer ordId,@Param("payTime") String payTime);

    /**
     *查询订单详细信息
     * @param detId
     * @return
     */
    OrderDetail selectOrderDetailByDetId(@Param("detId") Integer detId);

    /**
     * 根据用户名查询用户的订单明细
     * @param accId
     * @return
     */
    List<OrderDetail> selectOrderDetailByAccId(@Param("accId") Integer accId,@Param("ordStatus") Integer ordStatus,@Param("pageStart") Integer pageStart,@Param("pageSize") Integer pageSize);

    /**
     * 根据用户名查询用户的订单明细数据笔数
     * @param accId
     * @param ordStatus
     * @return
     */
    int selectOrderDetailNumByAccId(@Param("accId") Integer accId,@Param("ordStatus") Integer ordStatus);

    /**
     * 根据订单明细Id更新订单状态
     * @param detId
     * @return
     */
    int updateOrdStatusByDetId(@Param("detId") Integer detId,@Param("ordStatus") Integer ordStatus);

    /**
     * 根据订单明细id更新订单明细
     * @param orderDetail
     * @return
     */
    boolean updateOrderDetailByDetId(OrderDetail orderDetail);

    int updateByPrimaryKey(OrderDetail record);
}